/**
 * @description: 防抖函数
 * @param {func} 需要防抖的函数
 * @param {wait} 防抖时间
 * @return {*} (context,...args):void
 */

export function debounce<T extends (...args: any[]) => void>(func: T, wait: number): (...args: Parameters<T>) => void {
  let timeout: NodeJS.Timeout;

  return function (this: ThisParameterType<T>, ...args: Parameters<T>) {
    const context = this; // 保存当前的 this 上下文

    clearTimeout(timeout);
    timeout = setTimeout(() => {
      func.apply(context, args); // 使用 apply 绑定 this 和传递参数
    }, wait);
  };
}
